﻿using WindMill.Models.Cadastro;
using WindMill.Services;
using System.ComponentModel;
using System.Linq;


namespace WindMill.Models.Controladoria
{
    partial class Historico : INotifyPropertyChanged , INotifyPropertyChanging
    {
        private Departamento _departamento = null;

        public Departamento Departamento
        {
            get
            {
                if (CodDepartamento == null)
                    return null;

                if (_departamento == null || _departamento.CodDepartamento != CodDepartamento)
                {
                    var context = OracleConnectionPool.GetPool().GetDbContext<EDMCadastro>() as EDMCadastro;
                    _departamento = context.Departamentos.SingleOrDefault(c => c.CodDepartamento == CodDepartamento);
                }

                return _departamento;
            }
            set
            {
                OnPropertyChanging("Departamento");
                _departamento = value;
                CodDepartamento = value != null ? value.CodDepartamento : (int?)null;
                OnPropertyChanged("Departamento");
            }
        }

        private CentroDeCusto _centroCusto = null;

        public CentroDeCusto CentroDeCusto
        {
            get
            {
                if (CodDepartamento == null)
                    return null;

                if (_centroCusto == null || _centroCusto.Id != CodDepartamento)
                {
                    var context = OracleConnectionPool.GetPool().GetDbContext<EDMCadastro>() as EDMCadastro;
                    _centroCusto = context.CentroDeCustos.SingleOrDefault(c => c.Id == CodCentroCusto);
                }

                return _centroCusto;
            }
            set
            {
                OnPropertyChanging("CentroDeCusto");
                _centroCusto = value;
                CodCentroCusto = value != null ? value.Id : (int?) null;
                OnPropertyChanged("CentroDeCusto");
            }
        }

        public event PropertyChangedEventHandler PropertyChanged;

        public void OnPropertyChanged(string property)
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(property));
            }
        }

        public event PropertyChangingEventHandler PropertyChanging;

        public void OnPropertyChanging(string property)
        {
            if (PropertyChanging != null)
            {
                PropertyChanging(this, new PropertyChangingEventArgs(property));
            }
        }
    }
}
